Emberveil sourcegame/2006Scape Server/src/main/java/com/rs2/game/content/traveling/DesertHeat.java
package com.rs2.game.content.traveling;
import com.rs2.Constants;
import com.rs2.event.CycleEvent;
import com.rs2.event.CycleEventContainer;
import com.rs2.event.CycleEventHandler;
import com.rs2.game.items.ItemConstants;
import com.rs2.game.players.Player;
import com.rs2.util.Misc;
import com.rs2.world.Boundary;
/**
* Aug 12, 2017 : 1:51:21 AM
* DesertHeat.java
* @author Andrew (Mr Extremez)
*/
public class DesertHeat {
/**
* Damage dealt to player
*/
private static int DAMAGE = 1+Misc.random(8);
/**
* Waterskin animation
*/
private static final int ANIMATION = 829;
/**
* Time player has if they don't have protection (90 seconds)
*/
private static int REGULAR_TIMER = 90000;
/**
* Integer to check if player has waterskins
*/
private static int waterskin = -1;
/**
* Waterskins before and after
*/
private static int[][] WATERSKINS = {
{1825, 1823},//waterskin 3
{1827, 1825},//waterskin 2
{1829, 1827},//waterskin 1
{1831, 1829}//waterskin 0
};
/**
* Desert clothes
*/
private static final int[][] CLOTHES = {
{1833, ItemConstants.CHEST}, {1835, ItemConstants.LEGS}, {1837, ItemConstants.FEET}
};
private static void doDamage(Player player) {
player.getPacketSender().sendMessage("You should get a waterskin for any traveling in the desert.");
player.handleHitMask(DAMAGE);
player.dealDamage(DAMAGE);
player.getPlayerAssistant().refreshSkill(Constants.HITPOINTS);
}
private static int getClothes(Player player) {
int temp = 0;
for (int element[] : CLOTHES) {
if (player.playerEquipment[element[1]] == element[0]) {
temp += 1;
}
}
return temp;
}
private static int getTimer(Player player) {
/**
* 10 secs extra for each desert clothing item
*/
int heat = 10000 * getClothes(player);
return REGULAR_TIMER + heat;
}
private static boolean preventHeat(Player player) {
return (Boundary.isIn(player, Boundary.NO_HEAT));
}
public static void callHeat(final Player player) {
if (!Boundary.isIn(player, Boundary.DESERT)
|| player.playerLevel[Constants.HITPOINTS] <= 0
|| preventHeat(player)) {
return;
}
CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
@Override
public void execute(CycleEventContainer container) {
if (!Boundary.isIn(player, Boundary.DESERT)
|| player.playerLevel[Constants.HITPOINTS] <= 0
|| player.disconnected
|| preventHeat(player)) {
container.stop();
return;
}
if (System.currentTimeMillis() - player.lastDesert > getTimer(player)) {
player.lastDesert = System.currentTimeMillis();
if (!checkWaterskin(player)) {
doDamage(player);
}
container.stop();
} else if (player.playerLevel[Constants.HITPOINTS] <= 0) {
player.isDead = true;
container.stop();
}
}
@Override
public void stop() {
}
}, 1);
}
public static boolean checkWaterskin(final Player player) {
for (int i = 0; i < WATERSKINS.length; i++) {
if (player.getItemAssistant().playerHasItem(WATERSKINS[i][1])) {
waterskin = i;
}
}
if (waterskin == -1) {//empty waterskin
return false;
}
if (waterskin >= 0) {
player.getItemAssistant().deleteItem(WATERSKINS[waterskin][1], 1);
player.getItemAssistant().addItem(WATERSKINS[waterskin][0], 1);
player.startAnimation(ANIMATION);
return true;
}
return false;
}
public static void showWarning(Player player) {
for (int i = 8144; i < 8196; i++) {
player.getPacketSender().sendString("", i);
}
for (int i = 12174; i < (12174 + 50); i++) {
player.getPacketSender().sendString( "", i);
}
for (int i = 14945; i < (14945 + 100); i++) {
player.getPacketSender().sendString("", i);
}
player.getPacketSender().sendString("@dre@DESERT WARNING", 8144);
player.getPacketSender().sendString("", 8145);
player.getPacketSender().sendString("The intense heat of the desert reduces your health.", 8147);
player.getPacketSender().sendString("Bring 2-5 waterskins to avoid receiving any damage.", 8148);
player.getPacketSender().sendString("", 8149);
player.getPacketSender().sendString("Wearing desert robes will not prevent the damage, but", 8150);
player.getPacketSender().sendString("will reduce it significantly.", 8151);
player.getPacketSender().sendString("", 8152);
player.getPacketSender().sendString("The waterskins however need to be re-filled. Bring a", 8153);
player.getPacketSender().sendString("knife and cut healthy cacti to re-fill the waterskins.", 8154);
player.getPacketSender().sendString("@red@Any water vessels will evaporate, such as jug of water.", 8155);
player.getPacketSender().showInterface(8134);
}
}